#define buzzer 4
#define ADC 2

#define timer1 5

#define delaytime 500


volatile byte state = LOW;   //状态为低电平 

// 声明一个定时器变量
//hw_timer_t *timer = NULL;
uint32_t  interruptCount;

// 定时器中断回调函数
void IRAM_ATTR timer_event()
{
    interruptCount++;
}

int freq = 4000;//设置频率
int potValue = 0;
int channel = 0;//通道号，取值0 ~ 15
int resolution = 8;//计数位数，2的8次幂=256

void setup() {
  Serial.begin(115200);  
  
  pinMode(ADC,INPUT_PULLUP);
  
  ledcSetup(channel, freq, resolution);
  ledcAttachPin(buzzer, channel);
  pinMode(timer1,OUTPUT);    
  
  timer = timerBegin(0,80,true);            // 配置定时器 这里使用的是定时器0(一共四个0123) 
                            // 80是这个定时器的分频系数 由于定时器基频是80Mhz 
                            // 这里设置80 就是1Mhz 就能保证定时器1us记录一次 
                            // true表面该定时器向上计数
  
  timerAttachInterrupt(timer,&timer_event,true);    // 配置定时器的中断函数 true表示边沿触发
  
  timerAlarmWrite(timer,1000,true);        // 设置定时器的报警值 当计时器计数值达到1000000时触发中断                              // true表示重加载
  
  timerAlarmEnable(timer);              // 使能定时器报警

  attachInterrupt(digitalPinToInterrupt(timer1), blink, CHANGE );  //设置触发中断的模式和中断服务函数
  digitalWrite(timer1,HIGH);
}

void loop() {
  ledcWriteTone(channel, freq);
  digitalWrite(timer1,state);
  delay(delaytime);
  
  ledcWriteTone(channel, 0);
  digitalWrite(timer1,!state);
  delay(delaytime); 
  potValue = analogRead(ADC);
  freq = potValue *10;
//  Serial.print("potValue:/r");
  Serial.println(potValue,DEC);
  Serial.println(freq,DEC);

}

  void blink() {
  state = digitalRead(timer1);
//  Serial.print("timer1 = ");
//  Serial.println(state);
}
